import java.util.Vector;

/**
 * VectorStack genera una pila genérica con la clase vector
 * @author andrew
 * @param <E>
 */

public class VectorStack<E> implements Stack<E> {
////////////////////////////////////////////////////////////////////
	protected Vector<E> data;
//////////////////////////////////////////////////////////////////
	/**
	 * Crea un nuevo stack de vectores
	 */
	public VectorStack() {
		data= new Vector<E>();
	}
	
	@Override
	/**
	 * Ingresa un elemento al final de la pila
	 * @param item E
	 */
	public void push(E item) {
		data.addElement(item);
	}

	/**
	 * Extrae el último elemento de la pila
	 * @return Último objeto tipo E disponible
	 */
	@Override
	public E pop() {
		try { return data.remove(data.size()-1); }
		catch (ArrayIndexOutOfBoundsException e) { System.err.print("Excepcion de arreglo (no hay elementos): "+e.getMessage()); }
		return null;
	}

	/**
	 * Permite ver el último elemento de la pila sin removerlo
	 * @return Último objeto tipo E disponible
	 */
	@Override
	public E peek() {
		try {return data.get(data.size()-1);}
		catch (ArrayIndexOutOfBoundsException e) { System.err.print("Excepcion de arreglo (no hay elementos): "+e.getMessage()); }
		return null;
	}

	/**
	 * Averigua si la pila está vacía
	 * @return True si la pila está vacía
	 */
	@Override
	public boolean empty() {
		return data.size()==0;
	}

	/**
	 * Regresa el tamaño de la pila
	 */
	@Override
	public int size() {
		return data.size();
	}
	
	/**
	 * Permite ver el interior de la pila
	 * @return
	 */
	public String show() {
		String content = "";
		for (int i=0; i<data.size(); i++) {
			content+= data.get(i)+" ";
		}
		return content;
	}

}
